"{Отчет.РеестрДокументов.Форма.ФормаЗаполнения(769)}: Ошибка при вызове метода контекста (Выполнить): {(28, 2)}: Ожидается выражение ")"<br><<?>>ГДЕ<br> Запрос.Выполнить();<br><br><br>Если не выбирать дату - формирует отчет. Если назначить какую-нибудь дату - ошибка<br>Куда я только не ставила эту скобку бесполезно. Что я делаю не так?<br><br><br><br>Процедура ФормированиеЗапросаДобавитьДокумент(Запрос, МетаданныеДокумента, ВидДокумента, МассивСвойств, ФлагЕстьУсловия)<br> <br>Если НЕ ВРЕГ(ВидДокумента) =ВРЕГ("ЗаказПокупателя") Тогда<br><br> Запрос.Текст = Запрос.Текст + "<br> |ВЫБРАТЬ РАЗЛИЧНЫЕ<br> | Док.Ссылка,<br> | Док.Дата,<br> | Док.Номер,<br> | """"" + МетаданныеДокумента.Представление() + """"" КАК ВидДокумента,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("ВидОперации", МетаданныеДокумента), "Док.ВидОперации", "NULL") + " КАК ВидОперации,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("Организация", МетаданныеДокумента), "Док.Организация", "NULL") + " КАК Организация,<br> | ";<br> Если ОбщегоНазначения.ЕстьРеквизитДокумента("СкладОрдер", МетаданныеДокумента) Тогда<br> ИмяРеквизитаСклад = "СкладОрдер";<br> Иначе<br> ИмяРеквизитаСклад = "Склад";<br> КонецЕсли;<br> Запрос.Текст = Запрос.Текст + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("Контрагент", МетаданныеДокумента), "Док.Контрагент", "NULL") + " КАК Контрагент,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента(ИмяРеквизитаСклад, МетаданныеДокумента), "Док."+ИмяРеквизитаСклад, "NULL") + " КАК Склад,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("СуммаДокумента", МетаданныеДокумента), "Док.СуммаДокумента", "NULL") + " КАК СуммаДокумента,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("ВалютаДокумента", МетаданныеДокумента), "Док.ВалютаДокумента", "NULL") + " КАК ВалютаДокумента,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("Ответственный", МетаданныеДокумента), "Док.Ответственный", "NULL") + " КАК Ответственный ,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("Количество", МетаданныеДокумента), "Док.Количество", "NULL") + " КАК Количество<br> |";<br> Запрос.Текст = Запрос.Текст + " ИЗ<br> | Документ." + ВидДокумента + " КАК Док<br> |";<br><br>Иначе<br> <br>Запрос.Текст = Запрос.Текст + "<br> |ВЫБРАТЬ РАЗЛИЧНЫЕ<br> | Док.Ссылка,<br> | Док.Дата,<br> | Док.Номер,<br> | """"" + МетаданныеДокумента.Представление() + """"" КАК ВидДокумента,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("ВидОперации", МетаданныеДокумента), "Док.ВидОперации", "NULL") + " КАК ВидОперации,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("Организация", МетаданныеДокумента), "Док.Организация", "NULL") + " КАК Организация,<br> | ";<br> Если ОбщегоНазначения.ЕстьРеквизитДокумента("СкладОрдер", МетаданныеДокумента) Тогда<br> ИмяРеквизитаСклад = "СкладОрдер";<br> Иначе<br> ИмяРеквизитаСклад = "Склад";<br> КонецЕсли;<br> Запрос.Текст = Запрос.Текст + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("Контрагент", МетаданныеДокумента), "Док.Контрагент", "NULL") + " КАК Контрагент,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента(ИмяРеквизитаСклад, МетаданныеДокумента), "Док."+ИмяРеквизитаСклад, "NULL") + " КАК Склад,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("СуммаДокумента", МетаданныеДокумента), "Док.СуммаДокумента", "NULL") + " КАК СуммаДокумента,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("ВалютаДокумента", МетаданныеДокумента), "Док.ВалютаДокумента", "NULL") + " КАК ВалютаДокумента,<br> | " + ?(ОбщегоНазначения.ЕстьРеквизитДокумента("Ответственный", МетаданныеДокумента), "Док.Ответственный", "NULL") + " КАК Ответственный ,<br> |Сумма (ТабЧасть.Количество) Как Количество<br> |";<br> Запрос.Текст = Запрос.Текст + " ИЗ<br> | Документ." + ВидДокумента + " КАК Док<br> |";<br><br>Запрос.Текст = Запрос.Текст + " соединение<br>| Документ.ЗаказПокупателя.Товары как ТабЧасть<br>| По Док.Ссылка = ТабЧасть.Ссылка<br>| сгруппировать по<br>|Док.Ссылка,Док.Номер,Док.Дата, Док.СуммаДокумента,Док.Организация,Док.Контрагент<br>|";<br><br> КонецЕсли;<br> <br> <br> ФлагЕстьУсловия = Ложь;<br> <br> Если МассивСвойств.Количество() > 0 Тогда<br> ДобавитьФильтрыПоСвойствам(Запрос, МассивСвойств);<br> КонецЕсли;<br> <br> ЕстьФильтры = ДобавитьФильтрыПоДокументу(Запрос, ВидДокумента, МассивСвойств, ФлагЕстьУсловия);<br> <br> Если Не ДатаНач = '00010101000000' Тогда<br> Запрос.Текст = Запрос.Текст + ?(ЕстьФильтры, " И ", " ГДЕ ") + "<br> |Док.Дата >= &ДатаНач<br> | ";<br> ЕстьФильтры = Истина;<br> КонецЕсли;<br> Если Не ДатаКон = '00010101000000' Тогда<br> Запрос.Текст = Запрос.Текст + ?(ЕстьФильтры, " И ", " ГДЕ ") + "<br> |Док.Дата <= &ДатаКон<br> | ";<br> ЕстьФильтры = Истина;<br> КонецЕсли;<br> <br><br>КонецПроцедуры // ФормированиеЗапросаДобавитьДокумент()<br><br>// Проверить, нужно ли исключить документ в тексте запроса<br>//<br>// Параметры<br>// МетаданныеДокумента<br>//<br>// Возвращаемое значение:<br>// Булево – Истина - документ нужно исключить, Ложь - нет<br>//<br>Функция ИсключитьДокумент(МетаданныеДокумента)<br> Для Каждого СтрокаОтбораДляПеребора Из Отбор Цикл<br> <br> Если НЕ СтрокаОтбораДляПеребора.Использование Тогда<br> Продолжить;<br> КонецЕсли;<br> <br> Если НЕ СтрокаОтбораДляПеребора.ИмяОтбора = "ДокументОтчета"<br> И Не СтрокаОтбораДляПеребора.ИмяОтбора = "Проведен"<br> И Не СтрокаОтбораДляПеребора.ИмяОтбора = "ПометкаУдаления"<br> И НЕ СтрокаОтбораДляПеребора.ИмяОтбора = "Категория"<br> И Найти(СтрокаОтбораДляПеребора.ПредставлениеОтбора, "(свойство документов)") = 0 Тогда<br> Если СтрокаОтбораДляПеребора.ИмяОтбора = "Склад" Тогда<br> Если ОбщегоНазначения.ЕстьРеквизитДокумента("СкладОрдер", МетаданныеДокумента) Тогда<br> ИмяРеквизита = "СкладОрдер";<br> Иначе<br> ИмяРеквизита = "Склад";<br> КонецЕсли;<br> Иначе<br> ИмяРеквизита = СтрокаОтбораДляПеребора.ИмяОтбора;<br> КонецЕсли;<br> Если НЕ ОбщегоНазначения.ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Тогда<br> Возврат Истина;<br> КонецЕсли;<br> КонецЕсли;<br> КонецЦикла;<br> <br> Возврат Ложь;<br>КонецФункции // ИсключитьДокумент()<br><br>// Добавляет в запрос необходимые виды документов<br>//<br>// Параметры:<br>// Запрос - запрос в который добавляется указанный вид документа<br>// МассивВидовДокументов - массив содержащий виды документов (строкой) которые надо добавить в запрос<br>// МассивСвойств - массив свойств документов по которым надо установить фильтр<br>// СтрКатегорий - строка таблицы фильтров в которой указаны фильтры по категории документов<br>//<br>Функция ДобавитьДокументВЗапрос(масЗапросов, МассивВидовДокументов, МассивСвойств, СтрокаОтбора)<br> Перем ЕстьФильтры;<br> Перем ФлагЕстьУсловия;<br><br> ФлагЕстьКатегории = Не СтрокаОтбора = Неопределено;<br> <br> текНомерТаблицы = 0;<br> текЗапрос = Неопределено;<br> максТаблиц = 1;<br> <br> К1 = -1;<br> ДобавлятьОкончаниеТекстаЗапроса = Ложь;<br> <br> Для Каждого ВидДокумента Из МассивВидовДокументов Цикл<br> //Здесь мы должны понять, не установлен ли фильтр по какому-либо реквизиту, которого нет у документа<br> //указанного вида. Если установлен, то мы просто не включаем документ в запрос, исключая его из отчета<br> <br> <br> МетаданныеДокумента = Метаданные.Документы[ВидДокумента];<br> <br> Если ИсключитьДокумент(МетаданныеДокумента) Тогда<br> Продолжить;<br> КонецЕсли;<br> <br> Если текНомерТаблицы = 0 Тогда<br> текЗапрос = Новый Запрос;<br> масЗапросов.Добавить(текЗапрос);<br> ФормированиеЗапросаНачало(текЗапрос);<br> ДобавлятьОкончаниеТекстаЗапроса = Истина;<br> Иначе<br> текЗапрос.Текст = текЗапрос.Текст + "<br> |ОБЪЕДИНИТЬ ВСЕ";<br> КонецЕсли;<br> текНомерТаблицы = текНомерТаблицы + 1;<br> <br> ФормированиеЗапросаДобавитьДокумент(текЗапрос, МетаданныеДокумента, ВидДокумента, МассивСвойств, ФлагЕстьУсловия);<br> <br> Если текНомерТаблицы = максТаблиц Тогда<br> текНомерТаблицы = 0;<br> ФормированиеЗапросаОкончание(текЗапрос, ФлагЕстьКатегории, СтрокаОтбора);<br> ДобавлятьОкончаниеТекстаЗапроса = Ложь;<br> КонецЕсли;<br> КонецЦикла;<br> <br> <br> Если текЗапрос = Неопределено Тогда<br> Возврат Ложь;<br> КонецЕсли;<br> <br> Если ДобавлятьОкончаниеТекстаЗапроса Тогда<br> ФормированиеЗапросаОкончание(текЗапрос, ФлагЕстьКатегории, СтрокаОтбора);<br> КонецЕсли;<br> <br> Возврат Истина;<br><br>КонецФункции // ДобавитьДокументВЗапрос()<br><br>// Обработка выбранных документов<br>//<br>// Параметры:<br>// Нет.<br>//<br>Процедура ВидОбработкиДокументы() Экспорт<br> Перем МассивСвойств;<br> Перем МассивВидовДокументов;<br> Перем Индекс;<br> Перем СтрФильтров;<br> Перем СтрКатегорий;<br><br> МассивСвойств = Новый Массив;<br> СтрКатегорий = Неопределено;<br><br> Для Каждого К Из Отбор Цикл<br><br> Если НЕ К.Использование Тогда<br> Продолжить;<br> КонецЕсли;<br><br> СтрФильтров = мТаблицаФильтры.Найти(К.ИмяОтбора, "ИмяПоля");<br><br> // На случай если не выбран фильтр<br> Если СтрФильтров = Неопределено Тогда<br> Продолжить;<br> КонецЕсли;<br><br> Если Не СтрФильтров.Свойство = Неопределено Тогда<br> МассивСвойств.Добавить(К);<br> КонецЕсли;<br> Если К.ИмяОтбора = "Категория" Тогда<br> СтрКатегорий = К;<br> КонецЕсли;<br><br> // Проверим на заполненность отбора по виду документа<br> Если К.ИмяОтбора = "ДокументОтчета" Тогда<br> Если ТипЗнч(К.ЗначениеОтбора) = Тип("СписокЗначений") <br> И К.ЗначениеОтбора.Количество()=0 Тогда<br> Предупреждение("Надо обязательно указать значение отбора для отбора по виду документа!", 60);<br> Возврат;<br> Иначе<br> Если НЕ ЗначениеЗаполнено(К.ЗначениеОтбора) Тогда<br> Предупреждение("Надо обязательно указать значение отбора для отбора по виду документа!", 60);<br> Возврат;<br> КонецЕсли;<br> КонецЕсли;<br> КонецЕсли;<br><br> КонецЦикла;<br><br> МассивВидовДокументов = Новый Массив;<br><br> Индекс = 0;<br> СтрокаОтбора = Отбор.Найти("ДокументОтчета", "ИмяОтбора");<br><br> Если СтрокаОтбора = Неопределено Тогда<br> Для Каждого К Из мСписокВидовДокументов Цикл<br> МассивВидовДокументов.Добавить(К.Значение);<br> КонецЦикла;<br> Иначе<br> Если СтрокаОтбора.Использование Тогда<br> Если СтрокаОтбора.ВидСравнения = ВидСравнения.НеРавно<br> ИЛИ СтрокаОтбора.ВидСравнения = ВидСравнения.НеВСписке Тогда<br><br> СписокИсключений = Новый СписокЗначений;<br> Если ТипЗнч(СтрокаОтбора.ЗначениеОтбора) <> Тип("СписокЗначений") Тогда<br> СписокИсключений.Добавить(СтрокаОтбора.ЗначениеОтбора);<br> Иначе<br> Для Каждого К Из СтрокаОтбора.ЗначениеОтбора Цикл<br> СписокИсключений.Добавить(К.Значение);<br> КонецЦикла;<br> КонецЕсли;<br> Для Каждого К Из мСписокВидовДокументов Цикл<br> Если СписокИсключений.НайтиПоЗначению(К.Значение) = Неопределено Тогда<br> МассивВидовДокументов.Добавить(К.Значение);<br> КонецЕсли;<br> КонецЦикла;<br> Иначе<br> Если ТипЗнч(СтрокаОтбора.ЗначениеОтбора) <> Тип("СписокЗначений") Тогда<br> МассивВидовДокументов.Добавить(СтрокаОтбора.ЗначениеОтбора);<br> Иначе<br> Для Каждого К Из СтрокаОтбора.ЗначениеОтбора Цикл<br> МассивВидовДокументов.Добавить(К.Значение);<br> КонецЦикла;<br> КонецЕсли;<br> КонецЕсли;<br> Иначе<br> Для Каждого К Из мСписокВидовДокументов Цикл<br> МассивВидовДокументов.Добавить(К.Значение);<br> КонецЦикла;<br> КонецЕсли;<br> КонецЕсли;<br><br> масЗапросов = Новый Массив;<br> Если НЕ ДобавитьДокументВЗапрос(масЗапросов, МассивВидовДокументов, МассивСвойств, СтрКатегорий) Тогда<br> Предупреждение("Установлены фильтры по реквизитам, которых нет в выбранных видах документов!<br> |Отчет не может быть сформирован.");<br> возврат;<br> КонецЕсли;<br> <br> Колво = масЗапросов.Количество();<br> <br> Если Колво = 1 Тогда<br> // РЕЗУЛЬТАТ ПОЛУЧАЕТСЯ ОДНИМ ЗАПРОСОМ<br> Запрос = масЗапросов.Получить(0);<br> Запрос.Текст = СтрЗаменить(Запрос.Текст, Символы.ПС + "#ПоместитьВоВременнуюТаблицу#", """");<br> <br> Иначе<br> // НУЖНО ДЕЛАТЬ НЕСКОЛЬКО ЗАПРОСОВ<br> масИменТаблиц = Новый Массив;<br> Менеджер = Новый МенеджерВременныхТаблиц;<br> <br> Для Сч=1 По Колво Цикл<br> Запрос = масЗапросов.Получить(Сч-1);<br> <br> ИмяТаблицы = "ВременнаяТаблица" + Формат(Сч, "ЧГ=0");<br> <br> ТекстЗапроса = Запрос.Текст;<br> ТекстЗапроса = СтрЗаменить(ТекстЗапроса, Символы.ПС + "#ПоместитьВоВременнуюТаблицу#", Символы.ПС + "Поместить " + ИмяТаблицы);<br> ТекстЗапроса = СтрЗаменить(ТекстЗапроса, Символы.ПС + "УПОРЯДОЧИТЬ ПО Дата, Ссылка", Символы.ПС + "ИНДЕКСИРОВАТЬ ПО Дата, Ссылка");<br> Запрос.Текст = ТекстЗапроса;<br> <br> масИменТаблиц.Добавить(ИмяТаблицы);<br> Запрос.МенеджерВременныхТаблиц = Менеджер;<br> Запрос.Выполнить();<br> КонецЦикла;<br> <br> ТекстЗапроса = "ВЫБРАТЬ<br> | ОтобранныеДокументы.*<br> |ИЗ (";<br> <br> Сч = 0;<br> Для Каждого ИмяТаблицы Из масИменТаблиц Цикл<br> ТекстЗапроса = ТекстЗапроса + ?(Сч=0, """", "<br> |ОБЪЕДИНИТЬ ВСЕ") + "<br> |ВЫБРАТЬ " + ИмяТаблицы + ".* ИЗ " + ИмяТаблицы;<br> Сч = Сч + 1;<br> КонецЦикла;<br> <br> ТекстЗапроса = ТекстЗапроса + ") КАК ОтобранныеДокументы<br> |УПОРЯДОЧИТЬ ПО Дата, Ссылка";<br> <br> Запрос = Новый Запрос;<br> Запрос.Текст = ТекстЗапроса;<br> Запрос.МенеджерВременныхТаблиц = Менеджер;<br> <br> КонецЕсли;<br> <br> РезультатЗапроса = Запрос.Выполнить();<br> Выборка = РезультатЗапроса.Выбрать();<br> ПечатьРеестра(Выборка);<br>КонецПроцедуры // ВидОбработкиДокументы()<br>"